home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2004 #6 / Amiga Plus CD - 2004 - No. 06.iso / AmiSoft / Util / libs / ExtraLib.lha / Extra / include / rhosigma / extradefs.i < prev    next >
Text File  |  2004-05-30  |  17KB  |  379 lines

  1. ; ___________________________________________________________________________
  2. ; |*************************************************************************|
  3. ; |*|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|*|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|*|
  4. ; |*| Set TAB to 15 for best readable file layout. |*| HiSoft DevPac 3.04 |*|
  5. ; |*|______________________________________________|*|____________________|*|
  6. ; |*************************************************************************|
  7. ; |*|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|*|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|*|
  8. ; |*|               |*|  $Id: extradefs.i (30.05.04)                      |*|
  9. ; |*| ###### ###### |*|  RhoSigma Source based on NDK 3.1 Includes 40.15  |*|
  10. ; |*| ##  ## ##   # |*| _________________________________________________ |*|
  11. ; |*| ##  ##  ##    |*|                                                   |*|
  12. ; |*| ######   ##   |*|  The public assembler defines for extra.library   |*|
  13. ; |*| ##      ##    |*|                                                   |*|
  14. ; |*| ##     ##   # |*| ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ |*|
  15. ; |*| ##     ###### |*|  Copyright © 1998-2004 RhoSigma, Roland Heyder    |*|
  16. ; |*|               |*|  All Rights Reserved.                             |*|
  17. ; |*|_______________|*|___________________________________________________|*|
  18. ; |*************************************************************************|
  19. ; ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
  20.  
  21.     IFND    RHOSIGMA_EXTRADEFS_I
  22. RHOSIGMA_EXTRADEFS_I    SET    1
  23.  
  24.     IFND    EXEC_TYPES_I
  25.      INCLUDE    exec/types.i
  26.     ENDC
  27.     IFND    EXEC_LIBRARIES_I
  28.      INCLUDE    exec/libraries.i
  29.     ENDC
  30.     IFND    EXEC_ALERTS_I
  31.      INCLUDE    exec/alerts.i
  32.     ENDC
  33.  
  34. ;---------- die BufInfoBlock-Struktur von »BufInfo()« -----------------------
  35.  
  36.   STRUCTURE    BIBStruct,0
  37.   APTR    bib_OwnerID      ; Task (TCB), der diesen Puffer öffnete
  38.   ULONG    bib_MaxSize      ; momentane Größe des Datenbereichs in Byte
  39.   ULONG    bib_FreeSize      ; davon momentan noch unbenutzt
  40.   APTR    bib_DataStart      ; Adresse des gegenwärtigen Datenbereichs
  41.   ULONG    bib_CurPos      ; aktuelle Cursorposition (Zählbeginn=0 !!)
  42.   ULONG    bib_EndPos      ; aktuelle Anfügeposition (Zählbeginn=0 !!)
  43.   APTR    bib_LastFind      ; Zeiger auf zuletzt gesuchte Daten od. 0-PTR
  44.   ULONG    bib_FindSize      ; die Länge obiger Such-Daten oder null
  45.   ULONG    bib_KeyNum      ; der Schlüssel der o.g. Such-Daten oder -1
  46. ;-------------------------------- neu ab v2.062
  47.   ULONG    bib_DataMemType  ; Speicherflags (MEMF_...) des Datenbereichs
  48. ;----------------------------------------------
  49.   LABEL    bib_SizeOf
  50.  
  51. ;---------- Modes für »SeekBuf()« -------------------------------------------
  52.  
  53. SKM_Current    = 0    ; Positionierung relativ zur gegenwärtigen CurPos
  54. SKM_Start    = 1    ; Positionierung relativ zum Pufferanfang
  55. SKM_End    = 2    ; Positionierung relativ zum Pufferende
  56. SKM_Bookmark    = 3    ; »Position« = Nummer der gewünschten Bookmark
  57.  
  58. ;---------- die Parameter-Struktur für »UnpackByteRun1()« -------------------
  59.  
  60.   STRUCTURE    UnpackParam,0
  61.   APTR    up_InBuf    ; Zeiger auf die gepackten Daten
  62.   ULONG    up_InLen    ; die Größe des gepackten Bereichs in Byte
  63.   ULONG    up_Private    ; beim ersten Aufruf unbedingt auf 0 setzen
  64.   LABEL    up_SizeOf
  65.  
  66. ;---------- Styles, Masken u. Flags für »SpecTextPrefs()« -------------------
  67.  
  68. ;** Styles **
  69. STS_Plain    = 0   ; normaler Text    \
  70. STS_Underline    = 1   ; unterstrichener Text    |  können durch Addition oder
  71. STS_Bold    = 2   ; fettgedruckter Text    |  log. ODER kombiniert werden
  72. STS_Italic    = 4   ; kursiver Text    /
  73.  
  74. ;** Masken **
  75. STM_Normal    = %00000000    ; keine Umrandung, d.h. normale Textausgabe
  76. STM_Outline    = %11111111    ; volle Umrandung
  77. STM_Shadow    = %00011100    ; Schatten unten/rechts sichtbar
  78. STM_Ghost    = %11000001    ; dies wirkt am besten, wenn Sie als »MPen«
  79.         ; die selbe Farbe verwenden, wie der Hinter-
  80.         ; grund hat
  81.  
  82. ;** Flags **
  83.   BITDEF  ST,FJAM2,0  ; Normalerweise benutzt »SpecText()« den DrawMode JAM1,
  84.            ; mit diesem Flag wird jedoch JAM2 erzwungen.
  85.   BITDEF  ST,AP2MP,1  ; immer der gerade eingestellte »APen« des RastPorts
  86.            ; soll als »MainPen« (MPen) verwendet werden
  87.   BITDEF  ST,BP2TL,2  ; immer der gerade eingestellte »BPen« des RastPorts
  88.            ; soll als »TopLeftPen« (TLPen) verwendet werden
  89.   BITDEF  ST,OP2BR,3  ; immer der gerade eingestellte »OPen« des RastPorts
  90.            ; soll als »BottomRightPen« (BRPen) verwendet werden
  91.   BITDEF  ST,PSWAP,4  ; vertauscht »TLPen« u. »BRPen«, d.h. »TLPen« wird für
  92.            ; un./re. und »BRPen« für ob./li. verwendet
  93.  
  94. ; Die folgenden Flags haben keinen Einfluß auf die Arbeitsweise der Funk-
  95. ; tion »SpecText()«. Sie dienen nur dazu, »SpecTextPrefs()« mitzuteilen,
  96. ; welche Parameter neu eingestellt werden sollen. Damit soll überflüssiges
  97. ; Register-retten verhindert werden, da Sie nicht jedem Register, welches
  98. ; von »SpecTextPrefs()« erwartet wird, zwangsläufig einen sinnvollen Wert
  99. ; zuweisen müssen. Wenn Sie z.B. mit D0-D5 irgendwelche Berechnungen machen,
  100. ; oder sie als Schleifenzähler benutzen, und wollen dann den »MPen« ver-
  101. ; ändern, dann brauchen Sie nur D0 mit diesem zu initialisieren und D5 das
  102. ; entsprechende Flag (STF_CMPEN) zuweisen, während Sie sich um D1-D4 nicht
  103. ; sorgen müssen, da diese bei jenem Aufruf vollkommen unberührt und unver-
  104. ; ändert bleiben, d.h. sie müssen weder gerettet noch initialisiert werden.
  105. ;
  106. ; ACHTUNG: Wenn keines der folgenden Flags angegeben wird, dann heißt das
  107. ; ¯¯¯¯¯¯¯¯ nicht, daß KEIN Wert geändert werden soll, sondern daß ALLE Werte
  108. ;          zu ändern sind !! (In diesem Falle müssen dann logischer Weise
  109. ;        auch alle Register initialisiert werden.)
  110.  
  111.   BITDEF  ST,CMPEN,10 ; Nur den »MPen« auf den angegebenen Wert ändern.
  112.   BITDEF  ST,TLPEN,11 ; Nur den »TLPen« auf den angegebenen Wert ändern.
  113.   BITDEF  ST,BRPEN,12 ; Nur den »BRPen« auf den angegebenen Wert ändern.
  114.   BITDEF  ST,STYLE,13 ; Nur den SoftStyle auf den angegebenen Wert ändern.
  115.   BITDEF  ST,CMASK,14 ; Nur die Maske auf den angegebenen Wert ändern.
  116.   BITDEF  ST,FLAGS,15 ; Nur die Flags auf den angegebenen Wert ändern.
  117.  
  118. ; Es können auch alle Kombinationen der obigen Flags angegeben werden. Die
  119. ; Funktion »SpecTextPrefs()« wird dann alles das, was Sie wünschen, ändern.
  120.  
  121. ;---------- Fehlernummern von »LastError()« ---------------------------------
  122.  
  123. NoError    = 0   ; bis jetzt ist kein Fehler aufgetreten
  124.  
  125. ;** DBS-Funktionen **
  126. BufInvalid    = 10  ; die angegebene Adresse war kein BufHandle
  127. NotOwner    = 11  ; nur der Task, der den Puffer öffnete, darf ihn auch wieder schließen
  128. NoBufMemory    = 12  ; nicht mehr genügend Speicher frei (MEMF_... s.a. bib_DataMemType)
  129. NoDOSProcess    = 13  ; die aufrufende Anwendung war kein DOS-Prozess
  130. IoErrRequired  = 14  ; ein DOS-Error ist aufgetreten (»IoErr()« der dos.library aufrufen)
  131. SeekBadMode    = 15  ; der angegebene »SeekMode« ist unbekannt
  132. SeekOffsetErr    = 16  ; gewünschte »Position« unter-/überschreitet den Pufferanfang bzw. das Pufferende
  133. NoFindMem    = 17  ; kein Speicher für Zwischenspeicherung der zu suchenden Daten (MEMF_PUBLIC)
  134. FindTooLong    = 18  ; von CurPos bis EndPos bzw. Pufferanfang sind nur noch weniger Daten, als gesucht werden sollen
  135. NoFindAvail    = 19  ; für »FindNext()/FindPrev()« ist mindestens ein »FindData()« erforderlich (gilt für jeden möglichen Schlüssel)
  136. InvalidKey    = 20  ; ein angegebener Schlüssel liegt außerhalb des gültigen Bereichs (bei Find-Funktionen max. 8 (0-7) / bei Bookmarks max. 16 (0-15))
  137. MarkNotSet    = 21  ; die angegebene Bookmark ist noch nicht gesetzt
  138. MarkCleared    = 22  ; die Daten an der angegebenen Bookmark wurden durch »Clear()« gelöscht
  139.  
  140. ;** StringToLong() **
  141. ResultValid    = 30  ; alles in Ordnung (das Ergebnis ist gültig)
  142. InvalidChar    = 31  ; im String wurde ein illegales Zeichen gefunden
  143. Overflow    = 32  ; repräsentierte Zahl wäre größer als 32 Bit (LONG)
  144.  
  145. ;** FillMem() **
  146. OddAddress    = 35  ; ungerade Startadresse bei WORD- oder LONG-Modus
  147. NotFilled    = 36  ; keine Füllung wegen Abrundung (Bereich zu klein, um wenigstens 1 Wert aufzunehmen)
  148.  
  149. ;** ShowMsg() **
  150. BadHeight    = 40  ; angegebene Höhe war größer als 200 Videozeilen
  151. NoStructMem    = 41  ; kein Speicher für benötigte Gfx-Strukturen (MEMF_ANY)
  152. NoChipMemory    = 42  ; nicht genügend Speicher für die BitPlanes (MEMF_CHIP)
  153. SpecTextErr    = 43  ; die Funktion »SpecText()« hat einen Fehler gemeldet
  154.  
  155. ;---------- die Basis-Struktur der extra.library ----------------------------
  156.  
  157.   STRUCTURE    XtraBase,LIB_SIZE   ; standardmäßige Library-Struktur
  158.   APTR    xb_Copyright         ; ein einzeiliger Copyrightvermerk(+0)
  159.   STRUCT    xb_Private,54         ; privater Datenbereich der Library
  160.   LABEL    xb_SizeOf         ; Größe der Struktur in Bytes
  161.  
  162. ;---------- von der extra.library erzeugte Alert's --------------------------
  163.  
  164. EL_AlertD    =    AT_DeadEnd!AN_Unknown
  165. EL_AlertR    =    AT_Recovery!AN_Unknown
  166. ; Typen-Kennungen der extra.library ($B5000000=DeadEnd/$35000000=Recovery)
  167.  
  168. EL_NoDfo    =    EL_AlertD!AG_OpenLib!AO_DiskfontLib
  169. ; konnte diskfont.library V33+ (bzw. V36+ für CGX-Version) nicht öffnen ($B503800B)
  170.  
  171. EL_NoDOS    =    EL_AlertD!AG_OpenLib!AO_DOSLib
  172. ; konnte dos.library V33+ (bzw. V36+ für CGX-Version) nicht öffnen ($B5038007)
  173.  
  174. EL_NoGfx    =    EL_AlertD!AG_OpenLib!AO_GraphicsLib
  175. ; konnte graphics.library V33+ (bzw. V36+ für CGX-Version) nicht öffnen ($B5038002)
  176.  
  177. EL_NoInt    =    EL_AlertD!AG_OpenLib!AO_Intuition
  178. ; konnte intuition.library V33+ (bzw. V36+ für CGX-Version) nicht öffnen ($B5038004)
  179.  
  180. EL_NoMath    =    EL_AlertD!AG_OpenLib!AO_MathLib
  181. ; konnte mathtrans.library       V33+ oder
  182. ; konnte mathieeesingbas.library V33+ oder
  183. ; konnte mathieeedoubbas.library V33+ nicht öffnen ($B5038005)
  184.  
  185. EL_Trespassed    =    EL_AlertD!AG_IOError!AO_Unknown
  186. ; Task hat Library benutzt, ohne sie vorher zu öffnen ($B5068035)
  187.  
  188. ;---------- mit extra.library verwendbare Macros (s.a. extra_lib.i) ---------
  189.  
  190. SMTPOS_C    EQU    -1    ; Text zentrieren
  191. SMTPOS_L    EQU    -2    ; Text linksbündig
  192. SMTPOS_R    EQU    -3    ; Text rechtsbündig
  193.  
  194. ;*** extra.library / SMCOLOR() ***
  195. ;============================================================================
  196. ; Dieses Macro erstellt einen Farbeintrag für die optional anzugebende Farb-
  197. ; tabelle für die Funktion »ShowMsg()«.
  198. ;----------------------------------------------------------------------------
  199. ; Definiert:    extradefs.i  (Copyright © 1998-2004 RhoSigma, Roland Heyder)
  200. ;
  201. ; Schablone:    Pen/A/N, Red/A/N, Green/A/N, Blue/A/N, END/K/S
  202. ;
  203. ; Parameter:    Pen   --> Nr. des zu ändernden Farbstiftes (3-15)
  204. ;        (0-2 sind reserviert u. werden ignoriert)
  205. ;
  206. ;    Red   --> Rot-Anteil der neuen Farbe (0-15)
  207. ;    Green --> Grün-Anteil der neuen Farbe (0-15)
  208. ;    Blue  --> Blau-Anteil der neuen Farbe (0-15)
  209. ;
  210. ;    END   --> Wird dieses Schlüsselwort angegeben, dann endet die
  211. ;              Farbtabelle an dieser Stelle, anderenfalls muß ein
  212. ;              weiterer Farbeintrag (Macro-Aufruf) folgen.
  213. ;
  214. ; Bemerkung:    Ein Beispiel für die Benutzung dieses Macros finden Sie in der
  215. ;    Datei »demo/ShowMsgDemo.ASM«.
  216. ;
  217. ; Siehe auch:    »SMTEXTP()«, »SMTEXT()«, »ShowMsg()«
  218. ;============================================================================
  219.  
  220. SMCOLOR    MACRO    ;(Pen/A/N, Red/A/N, Green/A/N, Blue/A/N, END/K/S)
  221.     ;-------------------------------------------------------------
  222.     dc.b    \1
  223. SMc\@    =    \2*256+\3*16+\4     ; RGB4 berechnen
  224.     dc.b    SMc\@>>8,SMc\@&255
  225.  
  226.     IFNC    '\5','END'
  227.      dc.b    1    ; noch eine Farbe
  228.     ELSEIF
  229.      dc.b    0    ; Ende der Farbtabelle
  230.     ENDC
  231.     ;-------------------------------------------------------------
  232.     ENDM    ;SMCOLOR
  233.  
  234. ;*** extra.library / SMTEXTP() ***
  235. ;============================================================================
  236. ; Dieses Macro erstellt einen Teilstring des Parameterstrings der Funktion
  237. ; »ShowMsg()« inclusive der gewünschten Einstellungen für die Textausgabe.
  238. ; Wahlweise kann der Text automatisch zentriert, oder links- bzw. rechtsbündig
  239. ; ausgerichtet werden.
  240. ;----------------------------------------------------------------------------
  241. ; Definiert:    extradefs.i  (Copyright © 1998-2004 RhoSigma, Roland Heyder)
  242. ;
  243. ; Schablone:    xPos/A/N, yPos/A/N, MPen/A/N, TLPen/A/N, BRPen/A/N, Style/A/N,
  244. ;    Mask/A/N, Text/A, END/K/S
  245. ;
  246. ; Parameter:    xPos  --> x-Position des Textes,
  247. ;        oder einer der oben definierten SMTPOS-Werte
  248. ;
  249. ;    yPos  --> y-Position des Textes,
  250. ;        Ausrichtung erfolgt an der Oberkante des Fonts
  251. ;
  252. ;    MPen  --> gewünschter MainPen        \
  253. ;    TLPen --> gewünschter TopLeftPen     |
  254. ;    BRPen --> gewünschter BottomRightPen | (s. »SpecTextPrefs()«)
  255. ;    Style --> gewünschter SoftStyle      |
  256. ;    Mask  --> gewünschte  Randmaske      /
  257. ;
  258. ;    Text  --> der auszugebende Text selbst,
  259. ;        in <..>, wenn Leerzeichen enthalten sind
  260. ;
  261. ;    END   --> Wird dieses Schlüsselwort angegeben, dann endet der
  262. ;              Parameterstring an dieser Stelle, anderenfalls muß
  263. ;              ein weiterer Teilstring (Macro-Aufruf) folgen.
  264. ;
  265. ; Bemerkung:    Dieses Macro sollten Sie nur dann verwenden, wenn Sie für
  266. ;    diesen Teilstring neue Einstellungen für Farben etc. machen
  267. ;    wollen. Wenn dieser Teilstring jedoch mit den gleichen Ein-
  268. ;    stellungen ausgegeben werden soll, wie der vorhergehende bzw.
  269. ;    Sie die Default-Einstellungen verwenden wollen, dann müssen
  270. ;    Sie stattdessen das Macro »SMTEXT()« verwenden.
  271. ;
  272. ;    Ein Beispiel für die Benutzung dieses Macros finden Sie in der
  273. ;    Datei »demo/ShowMsgDemo.ASM«.
  274. ;
  275. ; Siehe auch:    »SMCOLOR()«, »SMTEXT()«, »ShowMsg()«
  276. ;============================================================================
  277.  
  278. SMTEXTP    MACRO    ;(xPos/A/N, yPos/A/N, MPen/A/N, TLPen/A/N, BRPen/A/N, Style/A/N, Mask/A/N, Text/A, END/K/S)
  279.     ;-------------------------------------------------------------
  280.     IFEQ    \1+(-SMTPOS_C)
  281.      dc.b    SMPz\@>>8,SMPz\@&255  ;X-Pos berechnet (zentriert)
  282.     ELSEIF
  283.      IFEQ    \1+(-SMTPOS_L)
  284.       dc.b    0,12           ;X-Pos (linksbündig)
  285.      ELSEIF
  286.       IFEQ    \1+(-SMTPOS_R)
  287.        dc.b    SMPr\@>>8,SMPr\@&255  ;X-Pos berechnet (rechtsbündig)
  288.       ELSEIF
  289.        dc.b    \1>>8,\1&255           ;angegebene absolute X-Pos
  290.       ENDC
  291.      ENDC
  292.     ENDC
  293.  
  294.     dc.b    \2,1,\3,\4,\5,\6,\7   ;Y-Pos u. neue Prefs
  295. SMPs\@    dc.b    "\8"           ;Text ohne 0-Byte
  296. SMPe\@
  297. SMPl\@    =    (SMPe\@-SMPs\@)       ;Länge der Zeichenkette
  298.  
  299. SMPz\@    =    (640-(SMPl\@*8))/2    ;X-Pos für Zentrierung
  300. SMPr\@    =    (640-(SMPl\@*8))-12   ;X-Pos für rechtsbündig
  301.  
  302.     IFNC    '\9','END'
  303.      dc.b    0,1           ;Text-0-Byte u. Continue
  304.     ELSEIF
  305.      dc.b    0,0           ;Text-0-Byte u. ParamEnde
  306.     ENDC
  307.     ;-------------------------------------------------------------
  308.     ENDM    ;SMTEXTP
  309.  
  310. ;*** extra.library / SMTEXT() ***
  311. ;============================================================================
  312. ; Dieses Macro erstellt einen Teilstring des Parameterstrings der Funktion
  313. ; »ShowMsg()«. Wahlweise kann der Text automatisch zentriert, oder links- bzw.
  314. ; rechtsbündig ausgerichtet werden.
  315. ;----------------------------------------------------------------------------
  316. ; Definiert:    extradefs.i  (Copyright © 1998-2004 RhoSigma, Roland Heyder)
  317. ;
  318. ; Schablone:    xPos/A/N, yPos/A/N, Text/A, END/K/S
  319. ;
  320. ; Parameter:    xPos  --> x-Position des Textes,
  321. ;        oder einer der oben definierten SMTPOS-Werte
  322. ;
  323. ;    yPos  --> y-Position des Textes,
  324. ;        Ausrichtung erfolgt an der Oberkante des Fonts
  325. ;
  326. ;    Text  --> der auszugebende Text selbst,
  327. ;        in <..>, wenn Leerzeichen enthalten sind
  328. ;
  329. ;    END   --> Wird dieses Schlüsselwort angegeben, dann endet der
  330. ;              Parameterstring an dieser Stelle, anderenfalls muß
  331. ;              ein weiterer Teilstring (Macro-Aufruf) folgen.
  332. ;
  333. ; Bemerkung:    Dieses Macro sollten Sie nur dann verwenden, wenn Sie für
  334. ;    diesen Teilstring die gleichen Einstellungen wie für den vor-
  335. ;    hergehenden Teilstring verwenden wollen. Wenn dieser Teil-
  336. ;    string jedoch neue Einstellungen für Farben etc. erhalten
  337. ;    soll, dann müssen Sie stattdessen das Macro »SMTEXTP()« ver-
  338. ;    wenden.
  339. ;
  340. ;    Ein Beispiel für die Benutzung dieses Macros finden Sie in der
  341. ;    Datei »demo/ShowMsgDemo.ASM«.
  342. ;
  343. ; Siehe auch:    »SMCOLOR()«, »SMTEXTP()«, »ShowMsg()«
  344. ;============================================================================
  345.  
  346. SMTEXT    MACRO    ;(xPos/A/N, yPos/A/N, Text/A, END/K/S)
  347.     ;----------------------------------------------------
  348.     IFEQ    \1+(-SMTPOS_C)
  349.      dc.b    SMz\@>>8,SMz\@&255  ;X-Pos berechnet (zentriert)
  350.     ELSEIF
  351.      IFEQ    \1+(-SMTPOS_L)
  352.       dc.b    0,12         ;X-Pos (linksbündig)
  353.      ELSEIF
  354.       IFEQ    \1+(-SMTPOS_R)
  355.        dc.b    SMr\@>>8,SMr\@&255  ;X-Pos berechnet (rechtsbündig)
  356.       ELSEIF
  357.        dc.b    \1>>8,\1&255         ;angegebene absolute X-Pos
  358.       ENDC
  359.      ENDC
  360.     ENDC
  361.  
  362.     dc.b    \2,0         ;Y-Pos, keine Prefs
  363. SMs\@    dc.b    "\3"         ;Text ohne 0-Byte
  364. SMe\@
  365. SMl\@    =    (SMe\@-SMs\@)       ;Länge der Zeichenkette
  366.  
  367. SMz\@    =    (640-(SMl\@*8))/2   ;X-Pos für Zentrierung
  368. SMr\@    =    (640-(SMl\@*8))-12  ;X-Pos für rechtsbündig
  369.  
  370.     IFNC    '\4','END'
  371.      dc.b    0,1         ;Text-0-Byte u. Continue
  372.     ELSEIF
  373.      dc.b    0,0         ;Text-0-Byte u. ParamEnde
  374.     ENDC
  375.     ;----------------------------------------------------
  376.     ENDM    ;SMTEXT
  377.  
  378.     ENDC    ;extradefs.i
  379.